<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // test();
        // function test(){
        //     console.log('test');
        // }
        // test();
        // var test = 666;
        // test();


        //打开浏览器  

        // test()
        // function test(){console.log('test');}
        // test()
        // var test = 666;
        //test();


        // 预解析  
        // 第一行  不解析 
        // 第二行  预解析 声明一个变量 test 然后 把一个函数放进去  
        // 第三行 不解析
        // 第四行 预解析  声明一个叫test的变量  暂时不赋值  
        // 第五行  不解析  


        // 预解析完成   肯定有个箱子叫test 里边是什么?
        //  上面是把函数放进去 
        //  下面是不赋值 
        // 当变量和函数名 一样的时候 以函数名为准  

        // 所以预解析结束以后test 里边是个函数  



        // 执行  
        // 因为 test里边是个函数 
        // 第一行正常执行   test 
        // 第二行忽略   test中依然是个函数 
        // 第三行正常执行  test 
        // 第四行  把666放到test这个箱子中   箱子就是666了  
        // 第五行报错 因为 test中不再是个函数  还把他当做函数对待  那么就报错
        test();
        var test = 666;
        // test();
        function test(){
            console.log('test');
        }
        test(); // 加()是函数才有的执行方式  


        // 打开浏览器 
        //  test();
        //  var test = 666; 
        // test();
        /* function test(){
            console.log('test');
        } */
        // test();

        //预解析  

        // 第二行预解析  准备一个箱子  起名test 暂时不赋值  
        // 第四行预解析   准备一个箱子  起名test 把一个函数放进去  
        // 变量名函数名一样 以函数名为准 
        // 预解析完成  发现test 中是个函数

        // 执行  
        // 第一行正常执行  
        // 第二行 箱子中变成了666
        // 第三行 报错 因为箱子中是666 你还把他看做一个函数 所以报错 
        // 最后一行也报错   因为箱子中还是个666
    </script>
</body>
</html>